package com.agencia.socketserver;

import java.io.IOException;
import java.io.ObjectInputStream;
import java.sql.SQLException;
import java.text.SimpleDateFormat;

import javax.naming.NamingException;

import com.agencia.connection.DataSocketAnular;
import com.agencia.connection.DataSocketBuscar;
import com.agencia.connection.DataSocketLogin;
import com.agencia.connection.DataSocketVenta;
import com.agencia.constant.Constants;
import com.agencia.dominio.Usuario;
import com.agencia.dominio.Venta;
import com.agencia.logica.*;


public class AgenciaProtocol {
	private static String strin = "";
	private static String strout = "";
	IAdminUsuario usuarioImp = IAdminAgenciaCobranza.getIAdminUsuario();
	private IAdminVenta ventaImp = IAdminAgenciaCobranza.getIAdminVenta();
	
	public Object processInput(ObjectInputStream objInput, String host) throws IOException, ClassNotFoundException, SQLException, NamingException {
		
		Object objOutput = null;
		Object objRead = objInput.readObject();
		DataSocketLogin objLogin = null;
		DataSocketVenta objVenta = null;
		DataSocketAnular objAnular = null;
		DataSocketBuscar objBuscar = null;
		
		/*Compruebo el tipo de Objeto enviado*/
		if (objRead instanceof DataSocketLogin){

			objLogin = (DataSocketLogin) objRead;
			AgenciaProtocol.strin = "Cliente: " + host + " Port:" +  Constants.getGlobalParam().get("port")+" "+ Constants.getMsg().get("msg08") + " Terminal: "+ objLogin.getOrigen() + " USR: " + objLogin.getUsuario();
			
			String user = objLogin.getUsuario();
			String pass = objLogin.getPassword();
			Integer terminal = objLogin.getOrigen();

			
			if(usuarioImp.Login(user, pass, terminal)){
				objLogin.setOK(true);
			}else{
				objLogin.setOK(false);
			}
			
			
			AgenciaProtocol.strout = Constants.getMsg().get("msg11")+ " Terminal: "+ objLogin.getOrigen() + " USR: " + objLogin.getUsuario();
			
			return objLogin;

		} else if(objRead instanceof DataSocketVenta){
			
			SimpleDateFormat dateLog = new SimpleDateFormat("yyyyMMdd-HH:mm:ss");
			objVenta = (DataSocketVenta) objRead;
			Usuario usuario = new Usuario();
			
			
			AgenciaProtocol.strin = "Cliente: " + host + " Port:" +  Constants.getGlobalParam().get("port")+" "+ Constants.getMsg().get("msg09") + " Terminal: " + objVenta.getId_terminal() + " Matricula: " + objVenta.getMatricula() + " Hora Inicio: " + dateLog.format(objVenta.getFechaInicio()) ;
			
			usuario = usuarioImp.ObtenerUsuario(objVenta.getusuario());
			
			Integer usr = usuario.getId();

			Venta venta = new Venta();
			venta.setFechaInicio(objVenta.getFechaInicio());
			venta.setFechaVenta(objVenta.getFechaVenta());
			venta.setId_terminal(objVenta.getId_terminal());
			venta.setMatricula(objVenta.getMatricula());
			venta.setMinutos(objVenta.getMinutos());
			venta.setImporte((double) 0);
			venta.setId_usuario(usr);
			
			objVenta = ventaImp.ingresarVenta(venta);
			AgenciaProtocol.strout = "Cliente: " + host + " Port:" +  Constants.getGlobalParam().get("port")+" "+ Constants.getMsg().get("msg09") + " Terminal: " + objVenta.getId_terminal() + "ID Venta: " + objVenta.getIdImm() + " Matricula: " + objVenta.getMatricula() ;
			
			return objVenta;
		
		}else if (objRead instanceof DataSocketAnular){
			
			objAnular = (DataSocketAnular) objRead;
	
			
			AgenciaProtocol.strin = "Cliente: " + host + " Port:" +  Constants.getGlobalParam().get("port")+" "+ Constants.getMsg().get("msg10") + " ID: " + objAnular.getIdImm();

			objAnular = ventaImp.anularVenta(objAnular);
			
			AgenciaProtocol.strout = Constants.getMsg().get("msg06")+" ID: " + objAnular.getIdAnulado();
			
			return objAnular;
			
		}else if (objRead instanceof DataSocketBuscar){
			AgenciaProtocol.strin = "Cliente: " + host + " Port:" +  Constants.getGlobalParam().get("port")+" "+ Constants.getMsg().get("msg14");
			
			objBuscar = (DataSocketBuscar) objRead;
			
			
			objBuscar = ventaImp.buscarDataVenta(objBuscar);
	
			AgenciaProtocol.strout = Constants.getMsg().get("msg16")+" : Usr: " + objBuscar.getId_usuario()
					+ " Term: " + objBuscar.getId_terminal()
					+ " ID: " + objBuscar.getIdImm()
					+ " Mat: " + objBuscar.getMatricula()
					+ " Err: " + objBuscar.getError();
					
 			return objBuscar;
			
		}

		return objOutput;
	}

	public String getStrin() {
		return strin;
	}

	public String getStrout() {
		return strout;
	}


}
